%{
#include <stdio.h>
#include "gram.tab.h"
void printflex(char text[]) {
	printf("<%s:%s>",text,yytext);
}
char *substr(char *src,int pos,int len) { 
  char *dest=NULL;                        
  if (len>0) {                            
    dest = (char *) malloc(len+1);        
    strncat(dest,src+pos,len);            
  }                                       
  return dest;                            
}
void putStringVal(int change)
{
  yylval.stringVal=malloc(yyleng + 1);
  if(yylval.stringVal == NULL)
  {
   perror("malloc failed");
   exit(EXIT_FAILURE);
  }
  if (change == 0 ) {
    strcpy(yylval.stringVal, yytext);
  }
  else {
    strcpy(yylval.stringVal,substr(yytext,1,strlen(yytext)-2));
  }
}

%}
KEYWORD new|JTree00|addObject|DefaultMutableTreeNode
SYMBOL        [A-Za-z][-_A-Za-z0-9]*
%%
\.  { return yytext[0]; }
=   { return yytext[0]; }
\(  { return yytext[0]; }
\)  { return yytext[0]; }
\"  { return yytext[0]; }
,   { return yytext[0]; }
;   { return yytext[0]; }
{KEYWORD} { putStringVal(0); return KEYWORD; }
{SYMBOL} { putStringVal(0); return SYMBOL; }
\"[^ \n]+\" { putStringVal(1); return STRINGVALUE; }
[ \t\n] { printf("%s", yytext); }
.   { return yytext[0]; }
%%

